<?php

error_reporting(E_ALL | E_STRICT);

if (!empty($_POST)) {
	session_start(); // à commenter/décommenter quand passage ajax/synchrone
	
	chdir('../..');
	require_once('lib/utils.php');
	require_once('lib/mysql.php');
	require_once('lib/member.php');
	require_once('pages/inscription/mode.php');
	
	sql_connect();
	
// 1) extraction des données du formulaire ---------------------------------
	
	$mode = intval($_POST['mode']);
	
	$id = intval($_POST['id']);
	$name = ucwords(clean_str($_POST['name']));
	$firstname = ucwords(clean_str($_POST['firstname']));
	$address = clean_str($_POST['address']);
	$postal_code = clean_str($_POST['postal_code']);
	$city = clean_str($_POST['city']);
	$email = clean_str($_POST['email']);
	$pass = clean_str($_POST['pass']);
	$pass2 = clean_str($_POST['pass2']);	
	$homephone = clean_str($_POST['homephone']);
	$cellphone = clean_str($_POST['cellphone']);
	$id_gym = intval($_POST['gymnasium']);
	$id_cat = intval($_POST['category']);
	$gender = isset($_POST['gender']) ? clean_str($_POST['gender']) : 'unknown'; // [0] si synchrone
	$climbing_years_practice = intval($_POST['climbing_years_practice']);
	$climbing_level = clean_str($_POST['climbing_level']);
	$competitions = isset($_POST['competitions']) ? intval($_POST['competitions']) : 'unknown'; // [0] si synchrone
	$has_pass92 = isset($_POST['has_pass92']) ? intval($_POST['has_pass92']) : 'unknown'; // [0] si synchrone
	$need_registration_proof = isset($_POST['need_registration_proof']) ? intval($_POST['need_registration_proof']) : 'unknown'; // [0] si synchrone
	$authorize_image_use = isset($_POST['authorize_image_use']) ? intval($_POST['authorize_image_use']) : 'unknown'; // [0] si synchrone
	
	// bricolage ajax / pas ajax
	$birth = '';
	if (isset($_POST['birth'])) {
		$birth = clean_str($_POST['birth']);
	}
	else {
		$birth = sprintf('%02d/%02d/%4d', intval($_POST['birth1']),
			intval($_POST['birth2']), intval($_POST['birth3']));
	}
	
// 2) contrôle des données -------------------------------------------------

	$errors = array();
	
	// contrôle de l'email
	if ($email == '') {
		$errors[] = 'Vous devez indiquer une adresse e-mail';
	}
	elseif (!valid_email($email)) {
		$errors[] = 'L\'adresse e-mail fournie n\'est pas valide';
	}
	else {
		switch ($mode) {
			case MODE_REGISTRATION:
				// ajout nouveau membre : l'email ne doit pas réservé
				if (member_email_exists($email)) {
					$errors[] = 'L\'adresse e-mail fournie est déjà utilisée (un seul compte par e-mail)';
				}
				if ($pass != $pass2) {
					$errors[] = 'Les deux mots de passe ne correspondent pas';
				}
				if (!valid_pass($pass)) {
					$errors[] = 'Le mot de passe est invalide, référez vous à la bulle d\'aide pour en choisir un nouveau';
				}
				// si nom, prénom, mail et date de naissance identiques, erreur
				if(member_exists($email, $name, $firstname, $birth)) {
					$errors[] = 'L\'inscription a déjà été prise en compte et vous avez du recevoir un email de confirmation';
				}
				break;
				
			case MODE_SELF_EDIT:
			case MODE_SELF_REINSCRIPTION:
				// modif : email différent de tous, sauf du sien
				$member = member_get_by_id($id);
				$my_email = $member['email'];			
				if ($email != $my_email && member_email_exists($email)) {
					$errors[] = 'L\'adresse e-mail fournie est déjà utilisée';
				}
				break;
				
			case MODE_EDIT:
			case MODE_ADD_MEMBER:
			case MODE_REINSCRIPTION:
				// ajout ou modif sur le même compte mail, l'email doit être celui du membre connecté
				if ($email != $_SESSION['email']) {
					$errors[] = 'L\'adresse e-mail doit être identique à celle de votre compte';
				}
				break;
				
			case MODE_ADMIN_EDIT:
				// rien. grands pouvoirs, grandes responsabilités (spiderman)
				break;
				
			default:
				// on arrête les frais =)
				return;
		}
	}
	
	// nom, prénom, sexe
	if ($name == '') {
		$errors[] = 'Vous devez indiquer votre nom';
	}
	if ($firstname == '') {
		$errors[] = 'Vous devez indiquer votre prénom';
	}
	if ($gender == '' || !in_array($gender,array('M','F'))) {
		$errors[] = 'Le champs sexe est mal renseigné';
	}
	// adresse
	if ($address == '') {
		$errors[] = 'Vous devez indiquer votre adresse';
	}
	if ($postal_code == '') {
		$errors[] = 'Vous devez indiquer votre code postal';
	}
	elseif (!valid_postal_code($postal_code)) {
		$errors[] = 'Le code postal doit comporter 5 chiffres';
	}
	if ($city == '') {
		$errors[] = 'Vous devez indiquer votre ville';
	}
	// téléphone fixe et portable
	if ($cellphone == '' && $homephone == '') {
		$errors[] = 'Vous devez indiquer au moins un numéro de téléphone';
	}
	else {
		if ($cellphone != '' && !valid_phone($cellphone)) {
			$errors[] = 'Le numéro de téléphone portable n\'est pas valide';
		}
		if ($homephone != '' && !valid_phone($homephone)) {
			$errors[] = 'Le numéro de téléphone fixe n\'est pas valide';
		}
	}
	// gymnase
	if ($id_gym == 0) {
		$errors[] = 'Vous devez choisir un gymnase';
	}
	// categorie
	if ($id_cat == 0) {
		$errors[] = 'Vous devez choisir une catégorie';
	}	
	// date de naissance
	if (!valid_date($birth)) {
		$errors[] = 'Vous devez indiquer votre date de naissance';
	}
	// info parent si mineur
	$need_parent_registration = get_age($birth) < 18;
	if ($need_parent_registration) {
		$parent_name = clean_str($_POST['namep']);
		if ($parent_name == '') {
			$errors[] = 'Vous devez indiquer le nom du parent ou responsable';
		}
		$parent_firstname = clean_str($_POST['firstnamep']);
		if ($parent_firstname == '') {
			$errors[] = 'Vous devez indiquer le prénom du parent ou responsable';
		}
		$emergency_phone = clean_str($_POST['emergency_phone']);
		if ($emergency_phone == '') {
			$errors[] = 'Vous devez indiquer un numéro à appeler en cas d\'urgence';
		}
		else if (!valid_phone($emergency_phone)) {
			$errors[] = 'Le numéro à appeler en cas d\'urgence n\'est pas valide';
		}
		$parent_email = clean_str($_POST['emailp']);
		if (!valid_email($parent_email)) {
			$errors[] = "L'email du parent ou responsable n'est pas valide";
		}
	}
	// 4 radios boutons
	if($competitions !== 0 && $competitions !== 1) {
		$errors[] = 'Le champs "compétitions" est mal renseigné';
	}
	if($has_pass92 !== 0 && $has_pass92 !== 1) {
		$errors[] = 'Le champs "pass 92" est mal renseigné';
	}
	if($need_registration_proof !== 0 && $need_registration_proof !== 1) {
		$errors[] = 'Le champs "justificatif" est mal renseigné';
	}
	if($authorize_image_use !== 0 && $authorize_image_use !== 1) {
		$errors[] = 'Le champs "autorisation" est mal renseigné';
	}	
	// cases à cocher obligatoires à l'inscription
	if ($mode & MODE_X_REGIS || $mode == MODE_REINSCRIPTION || $mode == MODE_SELF_REINSCRIPTION) {
		if (!isset($_POST['check_transport']) || !isset($_POST['check_reglement'])) {
			$errors[] = "Vous devez cocher les deux cases d'acception du règlement";
		}
	}
	
// 3) si succès, enregistrement et envoi de mail de confirmation -----------

	if (count($errors) == 0) {
		switch ($mode) {
			case MODE_REGISTRATION:
			case MODE_ADD_MEMBER:
				$function_name = $mode == MODE_REGISTRATION ? 'member_register' : 'member_register_managed';
				
				// TODO: vérifier que l'insert se fait correctement
				$id_member = $function_name($birth, $name, $firstname, $address, $city, $postal_code,
					$email, $pass, $homephone, $cellphone, $id_gym, $id_cat, $gender, $climbing_level, 
					$climbing_years_practice, $competitions, $has_pass92, $need_registration_proof, $authorize_image_use);
				
				if ($need_parent_registration) {
					member_set_parent($id_member, $parent_name, $parent_firstname, $emergency_phone, $parent_email);
				}
				
				// Permet de savoir à quel moment on veut cacher le formulaire et afficher le message
				$mail_ok = false;
				if ($mode == MODE_REGISTRATION)
					$mail_ok = send_registration_mail($email, $name, $firstname, $pass, true);
				elseif ($mode == MODE_ADD_MEMBER)
					$mail_ok = send_registration_mail($email, $name, $firstname, NULL, false);
				
				if ($mail_ok) {
					header("HTTP/1.0 400 Bad Request");
				}
				else {
					header("HTTP/1.0 417 Expectation failed");
				}
				
				break;
				
			case MODE_SELF_EDIT:
			case MODE_EDIT:
			case MODE_ADMIN_EDIT:
			case MODE_REINSCRIPTION:
			case MODE_SELF_REINSCRIPTION:
				// TODO: vérifier que l'update se fait correctement
				member_update($id, $birth, $name, $firstname, $address, $city, $postal_code,
				$email, $homephone, $cellphone, $id_gym, $id_cat, $gender, $climbing_level, 
				$climbing_years_practice, $competitions, $has_pass92, $need_registration_proof, $authorize_image_use);
			
				$data = member_get_by_id($id);
				$id_parent = $data['idParent'];
				if ($need_parent_registration) {
					member_update_parent($id_parent, $parent_name, $parent_firstname, $emergency_phone, $parent_email);
					// un membre majeur est devenu mineur, ajout du parent
					if ($id_parent == 0) {
						member_set_parent($id, $parent_name, $parent_firstname, $emergency_phone, $parent_email);
					}
				}
		
				if ($mode == MODE_REINSCRIPTION || $mode == MODE_SELF_REINSCRIPTION) {
					member_reset_registration($id);
					echo '<p class="success">Votre demande de réinscription a été enregistrée, votre êtes maintenant en attente de validation</p>';
					if (!send_registration_mail($email, $name, $firstname, NULL, false)) {
						echo '<p class="warning">Échec de l\'envoi de l\'email</p>';	
					}
					
				}
				else {
					if (send_modification_mail($email, $name, $firstname)) {
						?>
						<p class="success">
							Modification réussie, un e-mail de notification vient d'être envoyé.
						</p>
						<?php
					}
					else {
						?>
						<p class="warning">
							Modification réussie, mais l'envoie de l'e-mail de notification n'a pas fonctionné.
						</p>
						<?php
					}
				}
				break;
		}
	}
	else {
		?>
		<div class="error">
			Des données sont manquantes ou invalides. Merci de corriger les erreurs suivantes :
			<?php print_array($errors); ?>
		</div>
		<?php
	}
}
?>

